package com.example.service.impl;

import com.example.entity.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.Map;


@Service
@Slf4j
public class JedisSerivceImpl {

    /**
     * Jedis操作Redis String类型
     */
    @Autowired
    private JedisPool jedisPool;

    /**
     * Redis完成缓存功能(String类型操作)
     * 1.判断Redis中是否存在key
     * 如果key存在，直接查询redis
     * 如果key不存在，查询mysql数据库，将查询结果保存到redis中，并返回.
     */

    /**
     * @param year 年份2021 2020
     * @return
     */
    public String getMessage(String year){
        String key = "message" + year;
        Jedis jedis = jedisPool.getResource();
        if (!jedis.exists(key)){
            log.info("查询的是mysql数据库");
            String result = year + "丑牛--》扭转乾坤";
            jedis.set(key,result);
            return result;
        }else{
            log.info("查询的是redis");
            return jedis.get(key);
        }
    }

    /**
     * 对象Redis,hash类型进行存储
     * 根据用户ID查询用户信息
     * 1.根据用户的ID生成Redis KEY
     * 2.判断Redis中是否存在该Key
     * 3.如果key不存在，查询mysql数据库，将查询结果存入redis hash类型，并返回结果
     * 4。如果key存在，直接查询Redis返回
     */
    public User selectUserById(String id){
        String key = "user:" + id;

        //得到Jedis连接
        Jedis jedis = jedisPool.getResource();
        User user = new User();
        if (!jedis.exists(key)){
            user.setId(id);
            user.setName("张三");
            user.setRemark("在学习redis");

            log.info("查询的是MySQL数据库--》" + user);
            Map<String,String> map = new HashMap<>();
            map.put("id",user.getId());
            map.put("name", user.getName());
            map.put("remark", user.getRemark());
            jedis.hset(key,map);
            log.info("MySQL查询的数据成功存入redis");
        }else {
            log.info("查询的是redis");
            Map<String, String> map = jedis.hgetAll(key);
            user.setId(map.get("id"));
            user.setName(map.get("name"));
            user.setRemark(map.get("remark"));
        }
        return user;
    }

}
